\subsection{Analisi dell'utenza}
Il sito è rivolto ad una comunità internazionale che comprende medici, biologi, chimici, ricercatori\dots{ }che operano nel campo dell'analisi spettrale legata a degli esami PET (Positron Emission Tomography).
Sarà necessario inoltre, per una corretta manutenzione avere degli amministratori del sito.
\`{E} possibile quindi individuare tre categorie di utenza:

\begin{itemize}
	\item {\bf Medici}: La maggior parte di loro avrà come interesse principale conoscere il software SAKE, 
	poterlo scaricare ed imparare ad usarlo limitatamente ad un uso personale. Pertanto bisognerà offrire
	il servizio di download e supporto.
	
	\item {\bf Centri di ricerca}: Questa categoria raccoglie tutti i membri dei vari centri di ricerca. 
	Una volta conosciuto SAKE, il loro interesse non è più limitato solo allo specifico programma, ma vorranno
	discutere sull'argomento più in generale. Andando a condividere le idee ed i risultati dei loro lavori,
	per farli conoscere alla comunità o per ottenere dei riscontri che li potrebbero offrire un aiuto 
	nel far progredire la ricerca. Per loro bisognerà avere una sezione dedicata allo scambio di informazioni.
	
	\item {\bf Amministratori}: Si tratta degli amministratori del sito. Possono o meno far parte del progetto 
	SAKE o avere conoscenze nell'ambito studiato, poiché il loro compito sarà quello di mantenere aggiornato il
	sito. Più in particolare si occuperanno della gestione degli utenti, della moderazione nel forum e dell'aggiornamento del supporto fornito. Avranno quindi bisogno di una sezione dedicata solo a loro, che gli permetta di eseguire le varie operazioni di amministrazione.
\end{itemize}

Come specificato in precedenza, si tratta di una comunità internazionale e che per di più si può definire limitata, poiché non è un ambito di lavoro comune e, ad oggi, si stimano circa una cinquantina di centri di ricerca al mondo.Pertanto l'utenza è già abituata ad avere rapporti con l'estero, quindi si è deciso di utilizzare la lingua
mondiale ufficiale, ovvero l'inglese. Non è stata presa in considerazione l'idea di tradurre il sito in ulteriori
lingue, poiché nessuna altra lingua conosciuta all'interno del team di sviluppo avrebbe portato valore aggiunto.
In futuro, si potrà pensare ad un miglioramento del sito, con una traduzione in lingue orientali od arabe, per
ampliare il bacino d'utenza.

\subsection{Struttura}\label{sec:struttura}
In sostanza, il sito è suddiviso in tre parti principali, rispecchiando le esigenze delle diverse categorie di utenza individuate:
\begin{itemize}
\item Parte di Presentazione;
\item Forum;
\item Parte di Amministrazione.
\end{itemize}
Lo studio e la progettazione dei contenuti e del design delle pagine, nonché la successiva produzione dei mockup illustrativi, è stata a carico di Christian Cardin e Andrea Scaboro, tranne che per la parte di amministrazione che se n'è preso incarico Andrea Tosatto.

\subsubsection{Parte di Presentazione}
È la parte che per prima si presenta all'attenzione del visitatore, e comprende tutte le pagine ``di facciata'' che compongono il sito. In questo gruppo rientrano la Home Page, la pagina delle caratteristiche generali, le news, le sezioni di download, tutte le pagine del menù Support e About. Essendo queste le pagine che avranno il maggior numero di visite, ci siamo concentrati con più attenzione all'usabilità e l'accessibilità dell'informazione.

La home page presenta volutamente un contenuto minimale, ma che espone all'utente in modo chiaro e diretto tutti gli assi più importanti. Si è tenuto conto dei timer impliciti di un utente medio (tempo di permanenza nella Home: 31 secondi) e della capacità media di lettura (93 parole in 31 secondi), quindi il contenuto della home page è stato modellato per essere appreso completamente in questo ridotto lasso temporale: in totale la parte informativa è formata da appena 32 parole! Perciò l'utente dovrebbe avere una sensazione positiva, invogliandolo a continuare nella navigazione.\\

Per le pagine interne il contenuto è più espanso, in linea con la permanenza media dell'utente nelle pagine interne, che può arrivare anche a 53 secondi. Tutte le informazioni presenti nella parte di presentazione possono essere raggiunte con al più 3 click a partire da qualsiasi pagina, il che è soddisfacente in quanto l'utente si aspetta di riuscire ad arrivare al contenuto in 3 click e mezzo in media! Nel nostro sito, i click medi da compiere per arrivare a qualsiasi informazione sono esattamente 2, sfruttando il menù.

\subsubsection{Forum}
Al forum si accede tramite l'apposito link nel menù. Chiunque può entrare e leggere i contenuti, ma per poter intervenire alle discussioni, votare un algoritmo o inserirne uno nuovo è necessario essere loggati. Se non si è loggati tali funzionalità verranno nascoste a qualsiasi tipologia di utente (tramite server, non per via css); mentre se il sistema riconosce un utente valido allora le abiliterà. In caso di mancato login, un messaggio di avviso viene mostrato sotto al titolo, prima del contenuto, invitando l'utente ad eseguirlo.

Il forum è ulteriormente suddiviso in tre sottosezioni: 
\begin{itemize}
\item \textbf{Visualizzazione SottoCategorie} Gli algoritmi sono suddivisi in sottocategorie, ognuna delle quali appartiene ad una categoria più generale. La pagina forum.cgi elenca tutte le sottocategorie presenti, raggruppate per diverse categorie.
\item \textbf{Visualizza lista algoritmi} Selezionata una sottocategoria, la pagina forumAlgorithms.cgi mostra la lista degli algoritmi presenti, indicando per ognuno il voto medio dato dagli utenti e il numero di commenti accumulati.
\item \textbf{Visualizza Algoritmo} Una volta selezionato un algoritmo, la pagina showAlgorithm.cgi finalmente visualizza il codice contornato dalle informazioni sull'autore, la data di creazione e il ranking. A seguire vengono i commenti degli utenti.
\end{itemize}
Il contenuto di questa sezione è perlopiù orientato alla consultazione, perciò deve essere ottimizzato per lo scorrimento e l'immediatezza della navigazione. Specialmente nella pagina di visualizzazione degli algoritmi, dove sono stati inseriti dei link ``torna su'' visibili e ``torna al menu'' nascosti per gli screenreader e dispositivi handheld.

\subsubsection{Amministrazione}
In questa sezione potranno accedere solamente gli amministratori del sito. Un utente amministratore si distingue da un utente normale per la capacità di modificare i contenuti delle sezioni, in particolare un amministratore può:
\begin{itemize}
\item Promuovere un utente ad amministratore, o viceversa. Ciò che è importante è che resti sempre almeno un amministratore.
\item Modifica della pagina FAQ: può inserire o eliminare delle categorie di domande, oppure aggiungere, rimuovere o modificare domande all'interno delle categorie. 
\item Gestione e moderazione forum. L'amministratore può modificare la struttura del forum aggiungendo o rimuovendo categorie e sottocategorie, così da organizzare i contenuti a suo piacimento. Un'altra operazione disponibile agli amministratori è la cancellazione di un algoritmo, disponibile direttamente durante la loro visualizzazione nella pagina showAlgorithm.cgi tramite un link.
\item Inserire o eliminare news. 
\end{itemize}
In questa sezione l'utente si troverà spesso a compiere operazioni meccaniche o ripetitive, e la classe di utenza che dovrà accedere a questa parte del sito sarà spesso abituata a lavorare con una tastiera. Perciò ogni link è stato dotato di un accesskey per velocizzare al massimo la navigazione, anche i link ancore che portano ai diversi contenuti della stessa pagina.

\subsection{Sintesi informativa}
In tutte le pagine sono mostrati all'utente in modo chiaro e diretto gli assi principali
\begin{description}
\item[\textbf{WHO}] (``Che sito è questo?''): Il logo nell'angolo in alto a sinistra è l'elemento che più attira l'attenzione. Se l'utente ha già avuto modo di utilizzare il software, o di vederlo da qualche parte nel web nei video dimostrativi, sarà in grado di riconoscere subito il marchio. In caso contrario, la prima volta che entra nel sito avrà modo di crearsi un'ancora visiva efficace per le volte successive.
\item[\textbf{WHERE}] (``Dove mi trovo?''): Subito sotto la ``zona hot'' del logo, è presente il breadcrumb che indica sempre la posizione in cui si trova l'utente. In tal modo, anche se arriva ad una pagina interna senza passare dalla Home (ad esempio seguendo un link dato da un motore di ricerca) sarà in grado di orientarsi all'interno del sito.
\item[\textbf{WHAT}] (``Di che cosa si tratta?''): Uno degli elementi più visibili in ogni pagina è il titolo della stessa, scritto in grande e con carattere grassetto. Tale titolo è stato pensato accuratamente pagina per pagina in modo che fosse in grado di descriverne il contenuto, o almeno che ne accennasse il concetto.
\item[\textbf{WHY}] (``Che benefici ne traggo?''): Se l'utente è intenzionato a continuare la sua permanenza, la risposta a questa domanda si trova nel sottotitolo di ogni pagina, riportata vicino al titolo e con carattere leggermente più piccolo, in modo tale da non distogliere l'attenzione dall'asse WHAT. Tale sottotitolo ha il compito di spiegare brevemente in poche parole cosa l'utente può fare nella pagina in cui si trova, o a cosa può servirgli.
\item[\textbf{HOW}] (``Come faccio a trovare quello che mi serve?''): Il menù in cima a tutte le pagine è lo strumento principale che l'utente userà per muoversi nel sito. Pertanto è ben provvisto di accesskey e tabindex per migliorare l'usabilità e l'accessibilità. Nel caso delle pagine dedicate all'help e al forum è disponibile una barra di ricerca.
\end{description}

L'asse WHEN (``Quali sono le ultime novità?'') non è stato contemplato in tutte le pagine, in quanto ritenuto superfluo e avrebbe rischiato di distogliere l'attenzione dagli assi più importanti. Nonostante ciò, tutte le informazioni sugli ultimi aggiornamenti sono contenute nella pagina dedicata alle News, e nella pagine di FAQ è indicata la data di ultima modifica dei contenuti.

\subsection{Costruzione di una pagina}
Il sito adotta un approccio particolare per la costruzione delle pagine, che può essere riassunto dal seguente schema:
\begin{figure}[H]
\begin{center}\includegraphics[keepaspectratio = true, width = 400px] {img/schemapagine.png}
\end{center}\caption{Costruzione di una pagina}\label{img:costrpag}
\end{figure}

Ad ogni pagina corrisponde uno script .cgi che compie queste operazioni. Essendo che la costruzione dell'intestazione è sempre la stessa per tutte le pagine (naturalmente indicando come parametro l'identificativo della pagina presente in PageHeader.xml) è stata costruita una funzione apposita \textbf{buildPage(pageId)} da richiamare in ogni pagina.

Ciò che si diversifica tra pagina e pagina è la produzione del contenuto: in quelle statiche è sufficiente importare il codice XHTML presente negli specifici file .html nella cartella \textit{public\_html}, mentre le pagine a contenuto dinamico richiedono il caricamento di uno specifico file .xml (vedi news, forum, help, faq) e della relativa trasformata. Alcune di queste pagine inseriscono una variabile all'interno del file XSL per specificare l'output (ad esempio, l'id dell'algoritmo da visualizzare o la pagina di help scelta dall'utente).

\begin{figure}[H]
\begin{center}\includegraphics[keepaspectratio = true, width = 400px] {img/schemacontenuto.png}
\end{center}\caption{Costruzione del contenuto}\label{img:costrcont}
\end{figure}

Tutte queste operazioni sono svolte dallo script di ogni pagina. Descriviamo la sequenza in cui avvengono:
\begin{itemize}
\item Lo script cgi richiama la funzione buildPage, contenuta nel file Function.pm, passando l'id della pagina da creare. La funzione carica i files PageHeader.xml, header.xsl, breadcrumb.xsl, navigator.xsl e applica le relative trasformate sostituendo il marcatore \textbf{\_\_IDPAGE\_\_} con l'id della pagina passato come parametro; successivamente salva il risultato in tre variabili distinte sotto forma di stringa. Vengono controllate le sessioni e creati i link html di login-logout a seconda se l'utente è loggato o meno, tale codice viene salvato in unta variabile \$access. Viene poi caricato il file pagetemplate.html che contiene dei marcatori \textbf{\_\_HEAD\_\_}, \textbf{\_\_ACCESS\_\_}, \textbf{\_\_BREADCRUMBS\_\_}, \textbf{\_\_NAVIGATOR\_\_},  \textbf{\_\_CONTENT\_\_} da sostituire con le stringhe precedentemente generate. L'output di tale operazione è il codice di una pagina completa ma ancora senza contenuto, viene salvato come stringa e restituito con return.
\item Lo script ora, a seconda delle esigenze, può reperire le risorse necessarie per generare il contenuto della pagina. Per le pagine statiche si limiterà a caricare il codice di un file .html presente su \textit{public\_html} e sostituirlo al marcatore \textbf{\_\_CONTENT\_\_}.

\item Per le pagine dinamiche lo script può invece ripetere il procedimento di caricamento di un file xml e della relativa trasformata, applicandola ed ottenere un output XHTML da sostituire al marcatore.

\item Alcune pagine invece non hanno bisogno di nessun foglio di trasformata, e il contenuto viene generato direttamente dallo script (vedi ad esempio la sezione di amministrazione).
\end{itemize}






